const redis = require('../../../redis/init');
const { lifeMomentsModule } = require('../../../ORM/public/Model.js');

const getLifeMoment = async (req, res) => {
  try {
    const { page = 1, size = 5 } = req.query; // 默认第一页，每页 5 条
    const redisKey = 'lifeMoments'; // 固定 Redis Key
    const startIndex = (page - 1) * size; // 计算当前分页的起始索引
    // 1. 查询 Redis 数据
    let cachedData = await redis.hGet(redisKey, page.toString());

    if (!cachedData) {
      // Redis 中没有缓存数据，查询数据库
      const offset = startIndex; // 数据库查询从哪一条开始
      const lifeMomentsFromDb = await lifeMomentsModule.findAll({
        offset,
        limit: parseInt(size), // 获取当前页需要的数量
        order: [['createdAt', 'DESC']],
      });

      // 将查询结果转为 JSON 字符串并存入 Redis
      if (lifeMomentsFromDb.length > 0) {
        const redisValues = lifeMomentsFromDb.map((item) => JSON.stringify(item));
        // 将数据存储到 Redis 哈希表中，键为页码，值为当前页的数据
        await redis.hSet(redisKey, page.toString(), JSON.stringify(redisValues));
      }

      // 使用数据库查询的数据
      cachedData = lifeMomentsFromDb.map((item) => JSON.stringify(item));
    } else {
      // Redis 中有缓存数据，将字符串解析为对象
      cachedData = JSON.parse(cachedData); 
    }

    // 2. 返回查询结果
    const lifeMoments = cachedData.map((item) => JSON.parse(item));
    return res.status(200).json({
      code: 200,
      message: 'Success',
      data: lifeMoments,
      meta: {
        page: parseInt(page),
        size: parseInt(size),
      },
    });
  } catch (error) {
    console.error('Error in getLifeMoment:', error);
    return res.status(500).json({
      code: 500,
      message: 'Internal Server Error',
    });
  }
};

module.exports = getLifeMoment;
